package main;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JTextPane;
import javax.swing.text.*;


/**
 * Zeigt ein SimpleText Format als formatierte Ausgabe an.
 *
 * @author Patrick Bauer
 */
class SimpleTextPane extends JTextPane {
    /**
     * Das StyledDocument auf welches geschrieben wird.
     */
    private StyledDocument doc;

    /**
     * Initialisiert die Attribute und definiert zu nutzende Stile
     */
    public SimpleTextPane() {
        this.doc = this.getStyledDocument();
        
        Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
        
        Style regular = doc.addStyle("regular", def);
        StyleConstants.setFontFamily(def, "SansSerif");
        
        Style s = doc.addStyle("ueberschrift", regular);
        StyleConstants.setFontSize(s, 15);
        StyleConstants.setBold(s, true);
        StyleConstants.setSpaceBelow(s, 5);
        StyleConstants.setSpaceAbove(s, 5);
        
        s = doc.addStyle("absatz", regular);
        StyleConstants.setFontSize(s, 12);
        StyleConstants.setSpaceBelow(s, 5);
        
        s = doc.addStyle("listitem", regular);
        StyleConstants.setLeftIndent(s, 20);
        StyleConstants.setSpaceBelow(s, 5);
    }

    /**
     * Feugt dem StyledDocument eine Ueberschrift hinzu.
     *
     * @param text Text der Ueberschrift
     */
    void addUeberschrift(String text) {
        try {
            this.doc.setLogicalStyle(doc.getLength(), doc.getStyle("ueberschrift"));
            this.doc.insertString(doc.getLength(), text, this.doc.getStyle("ueberschrift"));
        } catch (BadLocationException ex) {
            Logger.getLogger(SimpleTextPane.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Fuegt dem StyledDocument einen Absatz hinz.
     *
     * @param text Text des Absatzes
     */
    void addAbsatz(String text) {
        try {
             this.doc.setLogicalStyle(doc.getLength(), doc.getStyle("absatz"));
            this.doc.insertString(doc.getLength(), text, this.doc.getStyle("absatz"));
        } catch (BadLocationException ex) {
            Logger.getLogger(SimpleTextPane.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Fuegt dem StyledDocument eine ListItem hinzu.
     *
     * @param text Text des ListItems.
     * @param i Nummer des Listitems (>1 bei nummerierten Listen und <1 bei nicht nummerierten Listen)
     */
    void addListItem(String text, int i) {
        if(i > 0) {
            text = (i +  ". ").concat(text);
        } else {
            text = ("- ").concat(text);
        }
        
        try {
            this.doc.setLogicalStyle(doc.getLength(), doc.getStyle("listitem"));
            this.doc.insertString(doc.getLength(), text, this.doc.getStyle("listitem"));
        } catch (BadLocationException ex) {
            Logger.getLogger(SimpleTextPane.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
}
